
-------- TML Message #1112 --------

Archive-Message-Number: 1112
Subject: PC portable programs
Date: Fri, 9 Mar 90 14:51:19 GMT
From: cs_s424%ux.kingston.ac.uk@nsfnet-relay.ac.uk


Hi

Thanks to all those who responded to my question about the use of 
portable IBM PC's (and clones) during a game. I enclose two poxy 
programs to which I use in addition to the npc generator and name
generator programs from the archive-server. The first is i simple prog
to expand a planets upp to a full description (just to save you looking
it up) and the second determiones weapon availability based on tech/law
level of the world your on.

These programs are written by me and are TOTALLY USELESS ! 

(unless you are running them during the game.)


I compiled them using TurboC v2.0 but they are so trivial they would
require little (or no) conversion.

Anybody still got anymore ideas of useful programs to run DURING a game?
                                             _____ 
                                            /____/      /
                                           / __        /
                                          / /__/_/__/_/___
                                         ------------------
   |   |   |  ---------------------------------------------------------------
- --[ ]-[ ]-[ ]-- Paul J Netherwood   e-mail:  P.J.Netherwood@uk.ac.kingston
   |   |   |    Research
- --[ ]-[ ]-[ ]--           
   |   |   |    School of Computer Science and Electronic Systems,
- --[ ]-[ ]-[ ]-- |/ingston |>olytechnic, Penrhyn Road, Surrey KT1 2EE, UK.
   |   |   |  --|\--------|--------------------------------------------------
                  \
- ----------------------------------
/**************************************************************************/
/*                                                                        */
/*   Program Name : full_upp.c                                            */
/*                                                                        */
/*   Description : Expands the upp for a planetary system to a full       */
/*                 description.                                           */
/*                                                                        */
/*                 Compiled on TurboC 2.0 using:                          */
/*                                                                        */
/*                       tcc -mt -lt full_upp.c                           */
/*                                                                        */
/*------------------------------------------------------------------------*/
/* Paul J. Netherwood  Kingston Polytechnic               | 28th Feb 1990 */
/*                                                        |               */
/*------------------------------------------------------------------------*/
/* Modification history:                                                  */
/*------------------------------------------------------------------------*/
/* none                                                   |               */
/**************************************************************************/

#include <stdio.h>
#include <ctype.h>

void
main(int argc, char *argv[])
{
int	size, atmos, hydro, pop, gov;
int cloudiness;

     if(argc == 1)
     {
           printf("Usage: full_upp <starb><size><atmos><hydro><pop><govt><law><tech>\n");
           return;
     }

     printf("Planetary details:\n");

	/* starport */
     printf("Starport class %c, ",toupper(argv[1][0]));

     switch(tolower(argv[1][0]))
     {
           case 'a' : printf("Excellent quality installation\n");
                      printf("Refined fuel available. Annual maintenance overhaul available. Shipyard\n");
                      printf("capabable of constructing starships and non-starships present.\n");
                      break;

           case 'b' : printf("Good quality installation\n");
                      printf("Refined fuel available. Annual maintenance overhaul available. Shipyard\n");
                      printf("capabable of constructing non-starships present.\n");
                      break;

           case 'c' : printf("Routine quality installation\n");
                      printf("Only unrefined fuel available. Reasonable repair facilities present.\n");
                      break;

           case 'd' : printf("Poor quality installation\n");
                      printf("Only unrefined fuel available. No repair facilities present.\n");
                      break;

           case 'e' : printf("Frontier installation\n");
                      printf("Essentially a marked spot of bedrock with no fuel, facilities, or\n");
                      printf("bases present.\n");
                      break;

           case 'f' : printf("Spaceport:Good quality installation\n");
                      printf("Only unrefined fuel available. Minor repair facilities.\n");
                      printf("Spaceport used mainly for inter-system travel.\n");
                      break;
                      
           case 'g' : printf("Spaceport:Poor quality installation\n");
                      printf("Only unrefined fuel available. No repair facilities.\n");
                      printf("Spaceport used mainly for inter-system travel.\n");
                      break;

           case 'h' : printf("Spaceport:Primitive Installation; no facilities.\n");
                      printf("Spaceport used mainly for inter-system travel.\n");
                      break;

           case 'y' : printf("No spaceport.\n");
                      break;

           case 'x' : printf("No starport. No provision is made for any ship landings.\n");
                      break;

           default:   printf("Not a listed starport type\n");
     }

	/* size */
	switch(tolower(argv[1][1]))
	{
           case '0' : printf("Asteroid/Planetoid Belt.");
                      break;

           case 'r' : printf("Ring (around a world)\n");
                      break;

           case 's' : printf("Small World (200km) Surface gravity of .024 of a G\n");
                      break;

           case '1' : printf("Small world. Surface gravity of .122 of a G \n");
                      break;

		case '2' : printf("Small world. Surface gravity of .24 of a G \n");
                      break;

		case '3' : printf("Small world. Surface gravity of 37.7 of a G\n");
                      break;

		case '4' : printf("Small world. Surface gravity of .5 of a G \n");
                      break;

		case '5' : printf("Medium sized world. Surface gravity of .625 of a G \n");
                      break;

		case '6' : printf("Medium sized world. Surface gravity of .84 of a G \n");
                      break;

		case '7' : printf("Medium sized world. Surface gravity of .875 of a G \n");
                      break;


		case '8' : printf("Medium sized world. Surface gravity 1 G \n");
                      break;

		case '9' : printf("Large world. Surface gravity of 1.12 G's \n");
                      break;

           case 'a' : printf("Large world. Surface gravity of 1.25 G's \n");
                      break;

           default :  printf("Non standard world size.");
	}

     if(tolower(argv[1][1]) == 'a')
           size = 10;
     else
           if(tolower(argv[1][1]) == 'r' || tolower(argv[1][1]) == 's')
                 size = 0;
           else
                 size = (int)argv[1][1] - 48;

     if(size > 0 && size <= 10)
           printf("World diameter is %d miles (%d km).\n",(size*1000),(size*1600));

	/* atmos */
     if((int)argv[1][2] >= 141)
           atmos = (int)argv[1][2] - 131;
     else
           atmos = (int)argv[1][2] - 48;
	switch(tolower(argv[1][2]))
	{
           case '0' : printf("No atmosphere. Vacc suit needed.\n");
                      break;

           case '1' : printf("Trace atmosphere. Vacc suit needed.\n");
                      break;

           case '2' : printf("Very thin, tainted atmosphere. Combination mask needed.\n");
                      break;

           case '3' : printf("Very thin atmosphere. Compressor mask needed.\n");
                      break;

           case '4' : printf("Thin, tainted atmosphere. Filter mask needed.\n");
                      break;

           case '5' : printf("Thin atmosphere.\n");
                      break;

           case '6' : printf("Standard atmosphere.\n");
                      break;

           case '7' : printf("Standard, tainted atmosphere. Filter mask needed.\n");
                      break;

           case '8' : printf("Dense atmosphere.\n");
                      break;

           case '9' : printf("Dense, tainted atmosphere. Filter mask needed.\n");
                      break;

           case 'a' : printf("Exotic atmosphere. Oxygen tanks needed.\n");
                      break;

           case 'b' : printf("Corrosive atmosphere. Vacc suit or protective suit needed.\n");
                      break;

           case 'c' : printf("Insidious atmosphere. Vacc suit or protective suit needed.\n");
                      printf("Although it will only last for 2 to 12 hours\n");
                      break;

           case 'd' : printf("Dense, High atmosphere. The air pressure at sea (or lower)\n");
                      printf("levels is too great to support life, but at higher altitudes,\n");
                      printf("the atmosphere is breathable.\n");
                      break;

           case 'e' : printf("The worlds surface is ellipsoidal, not spherical in shape.\n");
                      printf("Because the atmosphere remains spherical, surface atmospheric\n");
                      printf("pressure ranges from very high at the middle to very low at the\n");
                      printf("ends. Breathable bands may exist at some point within the range\n");
                      printf("of pressure.\n");
                      break;

           case 'f' : printf("Thin, Low atmosphere. The world is a large, massive one with a thin\n");
                      printf("atmosphere which settles in the lowest levels of the terrain. As a\n");
                      printf("result, the atmosphere is unbreathable at most altitudes, but is\n");
                      printf("breathable at very low atltitudes (as in depressions or deep valleys).\n");


           default: printf("Non standard atmosphere classification.\n");
	}

	/* hydro */
	switch(tolower(argv[1][3]))
	{
           case '0' : hydro = 0;
                      printf("No free standing water.\n");
                      break;

           case '1' : 
		case '2' :
		case '3' :
		case '4' :
		case '5' :
		case '6' :
		case '7' :
		case '8' :
		case '9' : if(tolower(argv[1][3]) == 'a')
                             hydro = 10;
                      else
                             hydro = (int)argv[1][3] - 48;
                      printf("%-2d percent water. ",hydro * 10);
                      switch(hydro)
                      {
                             case 0 : cloudiness = 0;
                                      break;

                             case 1 : cloudiness = 0;
                                      break;

                             case 2 : cloudiness = 10;
                                      break;

                             case 3 : cloudiness = 10;
                                      break;

                             case 4 : cloudiness = 20;
                                      break;

                             case 5 : cloudiness = 30;
                                      break;

                             case 6 : cloudiness = 40;
                                      break;

                             case 7 : cloudiness = 50;
                                      break;

                             case 8 : cloudiness = 60;
                                      break;

                             case 9 : cloudiness = 70;
                                      break;

                             case 10: cloudiness = 70;
                                      break;
                      }
                      if(atmos >= 10)
                             if(cloudiness == 70)
                                   cloudiness = 100;
                             else 
                                   cloudiness += 40;
                      else
                             if(atmos < 3 && cloudiness > 20)
                                   cloudiness = 20;
                             else
                                   if(atmos == 14)
                                         cloudiness /= 2;
                      printf("Cloud cover is %d percent\n",cloudiness);
                      break;

           case 'a' : printf("No land masses.\n");
                      break;

           default : printf("Non standard hydrographics classification.\n");
	}

	/* pop */
     pop = (int)argv[1][4] - 48;
	switch(tolower(argv[1][4]))
	{
           case '0' : printf("No inhabitants.\n");
                      break;

           case '1' : printf("Tens of inhabitants.\n");
                      break;

		case '2' : printf("Hundreds of inhabitants.\n");
                      break;

		case '3' : printf("Thousands of inhabitants.\n");
                      break;

		case '4' : printf("Tens of thousands of inhabitants.\n");
                      break;

		case '5' : printf("Hundreds of thousands of inhabitants.\n");
                      break;

		case '6' : printf("Millions of inhabitants.\n");
                      break;

		case '7' : printf("Tens of millions of inhabitants.\n");
                      break;

		case '8' : printf("Hundreds of millions of inhabitants.\n");
                      break;

		case '9' : printf("Billions of inhabitants.\n");
                      break;

           case 'a' : pop = 10;
                      printf("Tens of billions of inhabitants.\n");
                      break;

           default : printf("Non standard population classification.\n");
	}

     /* Government */
     gov = (int)argv[1][5] - 48;
     switch(tolower(argv[1][5]))
     {
           case '0' : printf("No government structure. In many cases, family bonds predominate.\n");
                      break;

           case '1' : printf("Company/Corporation. Government by a company managerial elite; citizens\n");
                      printf("are company employees.\n");
                      break;

		case '2' : printf("Participating Democracy. Government by advice and consent of the citizen.\n");
                      break;

		case '3' : printf("Self-Perpetuating Oligarchy. Government by a restricted minority, with\n");
                      printf("little or no input from the masses.\n");
                      break; 

		case '4' : printf("Representative Democracy. Government by elected representatives.\n");
                      break;

		case '5' : printf("Feudal Technocracy. Government by specific individuals for those who\n");
                      printf("agree to be ruled. Relationships are based on peformance of technical\n");
                      printf("activities which are mutually beneficial.\n");
                      break;

		case '6' : printf("Captive Government. Government by a leadership answerable to an outside\n");
                      printf("group; a colony or conqured area.\n");
                      break;

		case '7' : printf("Balcanization. No central ruling authority exists; rival governments compete\n");
                      printf("for control.\n");
                      break;

		case '8' : printf("Civil Service Bureaucracy. Government by agencies employing individuals\n");
                      printf("selected for their expertise.\n");
                      break;

		case '9' : printf("Impersonal Bureaucracy. Government by agencies which are insulated from\n");
                      printf("the governed.\n");
                      break;

           case 'a' : printf("Charismatic Dictator. Government by a single leader enjoying the confidence\n");
                      printf("of the citizens.\n");
                      break;

           case 'b' : printf("Non-Charismatic Dictator. A previous charismatic dictator has been replaced\n");
                      printf("by a leader through normal channels.\n");
                      break;

           case 'c' : printf("Charismatic Oligarchy. Government by a selected group, organisation, or class\n");
                      printf("enjoying the overwhelming confidence of the citizenry.\n");
                      break;

           case 'd' : printf("Religious Dictatorship. Government by a religious organisation without regard\n");
                      printf("to the needs of the citizenry.\n");
                      break;

           default : printf("Non standard government classification.\n");

     }

	/* law */
     printf("Law Level %c: ",toupper(argv[1][6]));
	switch(tolower(argv[1][6]))
	{
           case '0' : printf("No weapon prohibitions.\n");
                      break;

           case '1' : printf("Body pistols undetectable by standard detectors, \n");
                      printf("expolosives (bombs, grenades), and poison gas prohibited.\n");
                      break;

		case '2' : printf("Portable energy weapons (laser carbine, laser rifle)\n");
                      printf("prohibited. Ships gunnery not affected.\n");
                      break;

		case '3' : printf("Weapons of a strict millitary nature (machine guns,\n");
                      printf("automatic rifles) prohibited.\n");
                      break; 

		case '4' : printf("Light assault weapons (sub-machine guns) prohibited.\n");
                      break;

		case '5' : printf("Personal concealable firearms (such as pistols and\n");
                      printf("revolvers) prohibited.\n");
                      break;

		case '6' : printf("Most firearms (all except shotguns) prohibited. The carrying of\n");
                      printf("any type of weapon openly is discouraged.\n");
                      break;

		case '7' : printf("Shotguns are prohibited.\n");
                      break;

		case '8' : printf("Long bladed weapons (all but daggers) are controlled, and open\n");
                      printf("possesion is prohibited.\n");
                      break;

		case '9' : printf("Possession of any weapon outside one's residence is prohibited.\n");
                      break;

           default  : printf("Possession of any weapon is prohibited.\n");
                      break;
	}

	/* tech */
     printf("Tech Level %c: ",toupper(argv[1][7]));
	switch(tolower(argv[1][7]))
	{
           case '0' : printf("Stone Age. Primitive.\n");
                      break;

           case '1' : printf("Bronze Age to Middle Ages.\n");
                      break;

		case '2' : printf("circa 1400 to 1700\n");
                      break;

		case '3' : printf("circa 1700 to 1860\n");
                      break; 

		case '4' : printf("circa 1860 to 1900\n");
                      break;

		case '5' : printf("circa 1900 to 1939\n");
                      break;

		case '6' : printf("circa 1940 to 1969\n");
                      break;

		case '7' : printf("circa 1970 to 1979\n");
                      break;

		case '8' : printf("circa 1980 to 1989\n");
                      break;

		case '9' : printf("circa 1990 to 2000\n");
                      break;

           case 'a' : printf("Interstellar community\n");
                      break;

           case 'b' : printf("Average Imperial tech level\n");    
                      break;

           case 'c' : printf("Average Imperial tech level\n");
                      break;

           case 'd' : printf("Above average Imperial tech level\n");
                      break;

           case 'e' : printf("Above average Imperial tech level\n");
                      break;

           case 'f' : printf("Technical maximum Imperial\n");
                      break;

           case 'g' : printf("Occasional non-Imperial\n");
                      break;

           default : printf("Non standard tech level classification.\n");
	}

     /* Trade classifications */
     printf("Trade Classifications: ");
     if(atmos >= 4 && atmos <= 9 && hydro >= 4 && hydro <= 8
     && pop >= 5 && pop <= 7)
           printf("Agricultural. ");

     if(atmos < 3 && hydro < 3 && pop >= 6)
           printf("Non-Agricultural. ");

     switch(atmos)
     {
           case 0 :
           case 1 :
           case 2 :
           case 4 :
           case 7 :
           case 9 : if(pop >= 9)
                         printf("Industrial. ");
     }

     if(pop < 6)
           printf("Non-Industrial. ");

     if( (atmos == 6 || atmos == 8) && pop >= 6 && pop <= 8 
     && gov >= 4 && gov <= 9)
           printf("Rich. ");

     if(atmos >= 2 && atmos <= 5 && hydro < 3)
           printf("Poor. ");

     if(hydro == 10)
           printf("Water World. ");

     if(hydro == 0 && atmos >= 2)
           printf("Desert World. ");

     if(atmos == 0)
           printf("Vacuum World. ");

     if(tolower(argv[1][1]) == '0')
           printf("Asteroid Belt. ");

     if( (atmos == 0 || atmos == 1) && hydro >= 1)
           printf("Ice Capped. ");
}
- -----------------------------------

/**************************************************************************/
/*                                                                        */
/*   Program Name : guns.c                                                */
/*                                                                        */
/*   Description : Determines the availability of a requested weapon      */
/*                 based on the tech/law level of the world were you      */
/*                 are trying to purchase it. If the weapon is available  */
/*                 a listed price modifier is given and the delivery time.*/
/*                 This is based on an old, old White Dwarf article by    */
/*                 Steve Cook entitled 'Guns for Sale'.                   */
/*                                                                        */
/*                 Compiled using TurboC v2.0 (Ansii C) with:             */
/*                     tcc -mt -lt guns    (flags just make it a .com)    */
/*                                                                        */
/*                 Conversion to unix/non-ansii C will just require       */
/*                 removal of a few #includes and renaming of the         */
/*                 randomising functions.                                 */
/*                                                                        */
/*                 Additional weapons may be added to the table just by   */
/*                 adding a new line in the following format:             */
/*                 "gun",<base chance>,<tech level min>,<law level max>,  */
/*                                                                        */
/*------------------------------------------------------------------------*/
/* Paul J. Netherwood  Kingston Polytechnic               |8th Mar 1990   */
/*                                                        |               */
/*------------------------------------------------------------------------*/
/* Modification history:                                                  */
/*------------------------------------------------------------------------*/
/* none                                                   |               */
/**************************************************************************/

#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <time.h>

/* Declaration and initialisation of gun table */

struct base_chance 
{
     char *gun;
     int chance,       /* Base percentage chance weapon is available */
     tech_min,         /* Minimum tech level required to make weapon */
     law_max;          /* Maximum law level that weapon is allowed */
} gun_table[] = {
     /* Weapon */  /* Base Chance *//* Tech *//* Law */
     "Accelerator Rifle",    50,       9,       2,
     "ACR",                  40,       10,      2,
     "Assault Rifle",        60,       7,       3,
     "Auto Cannon",          1,        8,       2,
     "Auto Pistol",          55,       5,       4,
     "Auto Rifle",           35,       6,       3,
     "Auto Shotgun",         30,       6,       3,
     "Bayonet",              75,       3,       7,
     "Blade",                75,       3,       7,
     "Body Pistol",          60,       7,       0,
     "Broadsword",           45,       2,       7,
     "Carbine",              60,       5,       5,
     "Cutlass",              55,       3,       7,
     "Dagger",               95,       1,       8,
     "FGMP 14",              1,        14,      1,
     "FGMP 15",              1,        15,      1,
     "Flamethrower",         1,        6,       1,
     "Gauss Rifle",          25,       12,      2,
     "Halberd",              40,       2,       7,
     "Heavy Body Pistol",    40,       7,       0,
     "Laser Carbine",        20,       8,       1,
     "Laser Rifle",          20,       9,       1,
     "LAG",                  40,       8,       3,
     "Needle Rifle",         10,       14,      1,
     "PGMP 12",              2,        12,      1,
     "PGMP 13",              2,        13,      1,
     "PGMP 14",              1,        14,      1,
     "Plasma Pistol",        -1,       16,      1,
     "Pike",                 40,       1,       7,
     "RAM GL",               25,       8,       0,
     "Revolver",             70,       4,       4,
     "Rifle",                55,       5,       5,
     "Shock Disablers",      20,       9,       4,
     "Shotgun",              70,       4,       6,
     "SMG",                  35,       5,       3,
     "Snub Pistol",          50,       8,       4,
     "Snub Rifle",           35,       8,       5,
     "Spear",                60,       0,       7,
     "Stun Pistol",          30,       8,       4,
     "Stun Rifle",           25,       8,       5,
     "Submachine Pistol",    40,       7,       3,
     "Sword",                50,       1,       7,
     "Tonite Pistol",        20,       12,      1,
     "Tonite Carbine",       30,       12,      1,
     "VRF Gauss Gun",        1,        10,      3,
     "Warper",               -1,       17,      1,
     "Wiper",                -1,       18,      1
};

#define NKEYS   ( sizeof gun_table / sizeof(struct base_chance) )
#define MAX_ACROSS 3         /* maximum gun names displayed across screen */

#define d(x)   ((rand() % x) + 1)

void
main(void)
{
int n,m,tech,law,streetwise,bribe,modifier,total_chance,price_mod,roll;
char choice;
long now;

     /* Randomise */
     srand(time(&now) % 37);

     printf("Weapon Availability\n");

     /* Display all the weapons */
     for(n = 0; n < NKEYS; n += MAX_ACROSS)
     {
           /* Display one row of weapons */
           for(m = 0; m < MAX_ACROSS; m++)
           {
                 if(n+m >= NKEYS)
                       break;

                 printf("%3d: %-20s ",n+m,gun_table[n+m].gun);
           }
           printf("\n");     /* Next line */
     }

     printf("Choose weapon: "); scanf("%d",&n);

     printf("\nThe %s is a tech level %d weapon and is banned\n",
           gun_table[n].gun,gun_table[n].tech_min);
     printf("at law levels %d and over\n",gun_table[n].law_max+1);


     if(gun_table[n].chance < 0)
     {
           printf("The %s is not available through know channels\n",gun_table[n].gun);
           return;
     }

     if(gun_table[n].chance < 10)
           printf("Chance of finding one of these is pretty slim\n");
     else
           if(gun_table[n].chance < 50)
                 printf("Availabilty for this weapon is low\n");
           else
                 printf("Availabilty for this weapon is high\n");

     printf("\nEnter the worlds tech level: "); scanf("%d",&tech);
     printf("Enter the worlds law level: "); scanf("%d",&law);

     total_chance = gun_table[n].chance;       /* Get base chance */
     price_mod = 0;

     /* Tech level modifier */
     if(tech >= gun_table[n].tech_min)
     {
           modifier = (tech - gun_table[n].tech_min) * 10;
           if(modifier > 50)
                 modifier = 50;
     }
     else
           modifier = (tech - gun_table[n].tech_min) * 15;

     total_chance += modifier;

     /* Law level modifier */
     if(law >= gun_table[n].law_max)
     {
           modifier = (law - gun_table[n].law_max) * -25;
           price_mod = (law - gun_table[n].law_max) * 15;
     }
     else
     {
           modifier = (gun_table[n].law_max - law) * 10;
           price_mod = (gun_table[n].law_max - law) * -5;
           if(modifier > 30)
                 modifier = 30;
     }

     total_chance += modifier;

     printf("\nPurchased at a general shop? [y/n]");
     do
           choice = tolower(getch());
     while(choice != 'y' && choice != 'n');

     if(choice == 'y')
     {
           total_chance -= 35;
           price_mod += 30;
     }
     else
     {
           printf("\nPurchased at a non-specialist shop? (e.g hunting shop) [y/n]");
           do
                 choice = tolower(getch());
           while(choice != 'y' && choice != 'n');
           if(choice == 'y')
           {
                 total_chance -= 15;
                 price_mod += 10;
           }
     }

     printf("\nStreetwise skill (enter 0 for no skill): "); scanf("%d",&streetwise);

     total_chance += streetwise * 10;
     price_mod -= streetwise * 5;

     printf("\nPurchased on the black market? [y/n]");
     do
           choice = tolower(getch());
     while(choice != 'y' && choice != 'n');

     if(choice == 'y')
     {
           if(law >= gun_table[n].law_max)
           {
                 modifier = (law - gun_table[n].law_max) * 15;
                 price_mod = (law - gun_table[n].law_max) * 25;
                 total_chance += modifier;
           }

           printf("\nBribery skill (enter 0 for no skill): "); scanf("%d",&bribe);

           total_chance += bribe * 10;
           price_mod += bribe * 10;
     }
     if(d(100) <= total_chance)
     {
           printf("\n%s available for purchase at %-+d percent listed price\n",
                 gun_table[n].gun,price_mod);
           roll = d(100);
           if(roll <= 50)
                 printf("available straight away\n");
           else
                 if(roll <= 75)
                       printf("available after %d hours\n",d(6) + d(6));
                 else
                       if(roll <= 90)
                             printf("available after %d days\n",d(6) + d(6));
                       else
                             printf("available after %d weeks\n",d(6) + d(6));
     }
     else
           printf("\nWeapon unavailable\n");
}

-------- TML Message #1113 --------

Archive-Message-Number: 1113
Date:          Sat, 10 Mar 90 09:29 EST
From: RWMIRA01%ULKYVX.BITNET@cornellc.cit.cornell.edu
Subject:       Re: PC Portable programs

>Thanks to all those who responded to my question about the use of
>portable IBM PC's (and clones) during a game. I enclose two poxy
>programs to which I use in addition to the npc generator and name
>generator programs from the archive-server.

Thanks for the programs.  They may prove useful (though I don't have a
portable) I may try to borrow one from work on weekends.

>Anybody still got anymore ideas of useful programs to run DURING a game?

I am working on a program (written mostly in Turbo Pascal) that displays the
planet you are on and all systems within jump 4 on a hex grid map that is very
close to the Traveller Sector/Subsector maps.  I use colors a little
differently and I don't have names on the map, but listed down the side.  The
system you are on stays in the center of the screen :-).  Any way, you enter
the hex you are travelling to and it expands the UWP to an expanded description
(not quite as far as yours took it) and it generated cargo for the trip and
such.

I am working on the encounter (both animal and person) and an improved trade
system.  Parts of these such as the animal encounter program are written in
turbo C to be stand alone.  I plan to pipe the output to temp files to be read
in my the master Pascal program..

The BAD THING about this software is that because of the map requirements I
had to use 640x480 16 color mode (though not much is lost in mono).  This will
keep many portables from running it.  I am looking a a means to reduce the
requirements to EGA, but then I just say why, have anyone that wants it upgrade
to VGA anyway (if IBM can do it so can I :-)  )

I may make this a commercial product, though in all probablility, I will
release it to this list as a BETA test (its what you get for being cool dudes).
I have no estimates on it's release but it is pretty close.....

Rob

-------- TML Message #1114 --------

Archive-Message-Number: 1114
Date:     Monday 12th March 1990 15:27:05 GMT
From: Alan Huscroft <ASSHUSCR%cms.am.cc.reading.ac.uk@nsfnet-relay.ac.uk>
Subject:  Thrusters

There is one point in the Starship Operator's Manual which grates a bit
on my sensibilities.
 
The section on thrusters says that the thruster plates must be rigidly
fixed pointing in one direction, usually towards the aft end of the ship.
If you try to apply thrust in any other direction, the amount you can
get is severely limited.  The upshot of this is that ships generally have
to come in to land nose-upwards and flip horizontal at the last moment.
Similarly, if you want to hover for more than a short period you have
to do it nose-upwards.
 
This strikes me as a very clumsy and ungainly way for a high-tech starship
to behave.  As a remedy, I propose that it should be possible for more
advanced thruster plates (say, TL 14+) to rotate around a port-starboard
axis.  This would have the following benefits:
 
(1) The plates could be directed towards the belly of the ship to
    facilitate lateral attitude takeoff/landing/hovering.
 
(2) The plates could be directed towards the forward end of the ship
    to enable some serious deceleration without having to flip the
    whole ship around.
 
Is this a good idea, or a silly idea, or am I the only one who cares?
 
............................................................................
: Alan Huscroft              : Janet:    A.Huscroft@uk.ac.reading          :
: Reading, England           : Internet: A.Huscroft@reading.ac.uk          :
: 6-G takeoffs AND landings! : X-boat:   A.Huscroft@terra.sol.solomani_rim :
:............................:.............................................:

-------- TML Message #1115 --------

Archive-Message-Number: 1115
Date: Sun, 11 Mar 90 13:27 EST
From: METLAY@vms.cis.pitt.edu
Subject: Vargr & Aslan Female Anatomy

James:

You're the moderator; I'll let you decide if this is to be posted. |->

[Metlay, this is fine.  It seems reasonably tasteful and discreet.  I
appreciate you sending possibly controversial topics to me first, and
hope that you and other TMLers will continue to do so in the future.
- -- James]

***********

I recently received a rather interesting piece of mail from a TML reader who 
asked to be kept anonymous. He beseeched me, in my capacity as TML historian
and fount of all knowledge Travellerish, to answer a question that had been
bothering him for a long time: put as delicately as possible, how well 
endowed are Aslan and Vargr women? He'd had his curiosity piqued by
conflicting representations in works by various "official" Traveller artists,
and was hoping that I could shed some official light on the subject. Well, I
can't; GDW and DGP, for reasons of public good taste, avoid any but the most
basic discussions of sexuality in their materials. But if people trust my
judgement and the logical arguments I'll use below, then we can probably
consider what I'm about to say as "official," and someone with more guts than
I have can send it to DGP or something. |-> 

Anyway, my logic is as follows. The closest thing to a discussion of sexuality
among the Vargr and the Aslan (the two races under serious consideration here)
that we have had to date is the TRAVELLERS' DIGEST article on children, and on 
information on marital patterns in older rule books. The chaos in Vargr 
society as a whole tells us nothing, but the male/female ratio in Aslan 
society and the prevalent polygamy in Aslan ekho (family) structure indicates
a long-standing need for several females to be sexually associated with one 
male, so as to assure the maximum number of offspring per year and per 
available healthy male. This would tend to hint at a small litter size, and in 
fact the TD article bears this out; Aslan mothers give birth to only one child 
at a time, after long gestation periods, and twinning is not unknown but is 
rarer than it is among humans. The TD article also tells us what we need to 
know about Vargr pregnancy; the mother gives birth to a litter of up to six 
pups, and the experience of pregnancy, whelping, and rearing/weaning leaves 
her bedridden for several years. Based on my knowledge of the Vargr ancestors
(which I've raised and bred all my life), I believe I can realistically fill 
in the missing details here.

Aslan women have two breasts, bilaterally symmetric in much the same fashion 
as human women. They change size only slightly with the rhythms of the 
female's sexual cycles, as do those of human women, and pregnancy and nursing
increase these changes for a period of one to two years. There is no need for 
any more than these, as there are never more than two kits to feed. Because of 
the torso strength of the female's upper body, and the occasional perogative 
to take over the rearing of the kits belonging to another female in the ekho 
who is dies in childbirth or is killed soon after birthing, the breasts are 
always in a state where proper stimulation can encourage lactation after a 
short delay (several days), and do not shrink substantially with disuse. This 
picture is borne out in the early drawings of Aslan women by William Keith
and David Dietrick (refer to the front cover art of Alien Module 1 for a 
perfect example of the female Aslan). The only counterexample, and in my
opinion a glaring failure in continuity on the part of DGP, was the drawing of
the female Aslan guide in the recent adventure on Kusyu in TD, where she is 
depicted as having four breasts. This oversight can easily be attributed to 
William Keith's astounding lack of continuity in drawing in the past; he has 
drawn anatomically perfect Aslan in many cases (FAR TRAVELLER magazine's
early issues, and the introduction of the Aslan in old JTAS), but is also 
guilty of terrible oversights (ALIEN REALMS, the Alien adventure module set 
from GDW, contains several hideously distorted Aslan pictures, where the poor
creatures are depicted as having human hands!). This one erroneous artist's
depiction aside, then, the question is settled for the Aslan.

The Vargr present a more difficult puzzle, however. Only one, count'em, ONE
female Vargr has ever been drawn in any Traveller publication, and that is
Gharukh, the cryptographer of THE TRAVELLER ADVENTURE, as drawn by Liz 
Danforth, David Dietrick and Brad Foster. (Refer to the many drawings of
Gvoudzon, the ex- Corsair gadabout, in the same book, or to ALIEN REALMS or
many other places, for representation of male Vargr.) Her clothing was such
that little or nothing of her anatomy was visible, and the confusion among the 
many artists who draw for Traveller as to how the bone structure of the Vargr 
torso is to be represented makes matters confusing. The crux of the puzzle is 
as follows: the Vargr was an obvious genetic alteration of the dog toward the 
model of the human. Its arms are human. Its legs, tail, and head are canine.
But what is its torso? Artists are split down the middle on the matter; the 
anatomical drawings in Alien Module 3 distinctly represent the torso and 
ribcage of the Vargr as being the narrow design of a dog's chest, and it is 
this interpretation that I favor, as do artists like Donna J. Barr. However, 
many artists have drawn Vargr as having human torsos and abdominal 
musculature, which strikes me as ludicrous in consideration of the rest of 
their bodies, particularly the legs and tail. So let me base the rest of my 
argument on the assumption that the arrangement of the Vargr torso and organs 
follows that of the Terran dog. The female dog has two rows of teats, several 
on a side. This allows for large litters of pups to be fed simultaneously.
However, the presence of so much excess weight when there are no pups to be
fed is detrimental to the female's survival in the wild; hence the size and
functionality of the mammary glands is directly linked to advanced pregnancy
and the years immediately thereafter. The female's weight can increase by up
to 50% as her body prepares for the task of feeding eight hungry pups; is it
any wonder why she is too exhausted to move from her bed for any length of
time? But when she is not expecting or has recently birthed, the glands shrink
to invisibility. A healthy female Vargr who is not expecting can not be told
from a male merely upon inspection of the torso; her fur hides what little
structure remains. I am sure that a Vargr could tell the difference, but that
is not a matter for discussion here. 

I apologize for the longwindedness of this discussion, but I wanted to be as 
precise in my terminology as possible. Consider this a plea for more careful 
continuity in Traveller art; the question never would have arisen if people
had taken a little bit more care, and had been a bit less prudish, in the 
past.

The frightening part of all of this is that DGP is about to release some new 
Alien books, in which these conclusions are likely to be ignored or carelessly 
refuted, and we can look forward to a long spell of trying to reconcile some
basically contradictory and silly views of races in whose essential realism
we would like to believe. Oh, well....

Yours with a slightly red face,

metlay


-------- TML Message #1116 --------

Archive-Message-Number: 1116
Date: Mon, 12 Mar 90 16:03 EST
From: Bob Mahoney <BOBMAH%PSC.BITNET@mitvma.mit.edu>
Subject: Co-refereeing?

Hi folks.

Does anyone have any experience with a co-refereed campaign?  By this I mean
one campaign being actively run by two referees.  For the purposes of this
question, let's exclude hand-me-down campaigns and campaigns that switch off
between two referees.  I'm looking for a situation where two people run a
campaign together: co-delevopment, etc.

If you have any related non-Traveller experience (like another game system),
I'm still interested.

The reason I ask, is that I have a very stable (but not quite stagnent) group
of players, and over the years I have switched off being "the supreme being"
with one of the other players.  We have switched back and forth several times
over the years, with good results.  (Of course, I'm better, right Kevin?)

I wonder if the two of us might not be able to merge our styles/ideas/etc., and
produce one very intense campaign.  There would be very little idle time for
the remaining three players, non-player characterizations would probably
improve (less distractions for the ref), and NPC's would certainly become more
unpredictable from the players standpoint.

I think it might add a real kick, and allow us (as referees) to have a lot of
fun with each others ideas.

Any thoughts, caveats, etc?

- -BobMah


-------- TML Message #1117 --------

Archive-Message-Number: 1117
From: "Mark F. Cook" <markc@hpcvss.cv.hp.COM>
Subject: Re: Paul's PC Programs
Date: Mon, 12 Mar 90 13:23:15 PST

Thanks for submitting the 2 PC programs, Paul.  I've got them running on
an HP workstation (with almost no mods at all), and I'm sure they'll run
on an HP Integral PC (I've got a couple of them) since it also runs HP-UX.

Later,

        Mark F. Cook

USMail: User Interface Technical Support
        Hewlett-Packard - Interface Technology Operation
        1000 NE Circle Blvd.  Corvallis, OR 97330

INTERNET: markc@hpcvss.cv.hp.com
UUCP:     {cmcl2, harpo, hplabs, rice, tektronix}!hp-pcd!markc

-------- End of TML Messages --------

